package oj.util.sUtil;

import java.io.InputStream;
import java.math.BigDecimal;
import java.util.Date;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Properties;

public class HUtil {

	private final int REPORTES = 1;

	private final int REPORTES_FINAL = 2;

	/* Este metodo muma dias a un String */
	public Date sumarDias(String fecha, int dias) {

		try {

			Date date = null;

			date = java.sql.Date.valueOf(fecha);

			Calendar calen = new GregorianCalendar();
			calen.setTimeInMillis(date.getTime());
			calen.add(Calendar.DATE, dias);

			return new Date(calen.getTimeInMillis());

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;

	}

	/* Este metodo muma dias a un String */
	public Date restarDias(String fecha, int dias) {

		try {

			Date date = null;

			date = java.sql.Date.valueOf(fecha);

			Calendar calen = new GregorianCalendar();
			calen.setTimeInMillis(date.getTime());
			calen.add(Calendar.DATE, -dias);

			return new Date(calen.getTimeInMillis());

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;

	}

	public java.sql.Date stringToDate(String sFecha) {
		java.sql.Date date = null;

		if (sFecha != null && !sFecha.equals("")) {
			date = java.sql.Date.valueOf(sFecha);
		}

		return date;
	}

	public String dateToString(java.util.Date fecha) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		String dateString = formatter.format(fecha);
		return dateString;
	}

	public boolean validarNumero(String cadena, String nombreCampo)
			throws Exception {

		boolean validado = true;

		if (!(cadena == null)) {

			if (cadena.length() > 0) {

				int i = 0;
				for (i = 0; i < cadena.length(); i++) {

					if (!((cadena.charAt(i) >= '0') && (cadena.charAt(i) <= '9'))) {
						System.out.println("El campo no es correcto");
						validado = false;
						break;
					}

				}

			} else {
				System.out.println("El campo no es correcto");
				validado = false;
			}
		} else {
			System.out.println("Es nula");
		}

		return validado;

	}

	public static String setStringNoNulo(String dato) {
		String ret = dato;
		if (dato == null) {
			ret = new String(" ");
		}
		return ret;
	}

	public String fechaDia() {
		Calendar rightNow = Calendar.getInstance();
		String ahora = "";
		String mes = "" + (rightNow.get(Calendar.MONTH) + 1);
		String dia = "" + (rightNow.get(Calendar.DATE));
		if (rightNow.get(Calendar.MONTH) + 1 < 10) {
			mes = "0" + (rightNow.get(Calendar.MONTH) + 1);
		}
		if (rightNow.get(Calendar.DATE) < 10) {
			dia = "0" + rightNow.get(Calendar.DATE);
		}
		return ahora = rightNow.get(Calendar.YEAR) + "-" + mes + "-" + dia;
	}

	public static BigDecimal setBigdecimalNoNulo(BigDecimal valor, int inicial) {
		BigDecimal ret = new BigDecimal(inicial);
		if (valor != null) {
			ret = valor;
		}
		return ret;
	}

	public String replParam(String param) {
		String ret = new String("");
		if (param == null || param.equals("")) {
			ret = "NULL";
		} else {
			ret = "\'" + param + "\'";
		}
		return ret;
	}

	public String replParam(BigDecimal param) {
		String ret = new String("");
		if (param == null || param.equals("")) {
			ret = "NULL";
		} else {
			ret = param.toString();
		}
		return ret;
	}

	public static String getNewId() {
		String id = "";
		String id2 = "";
		try {

			SimpleDateFormat format = new SimpleDateFormat("SSMMyyssyymmdd");
			Date fechas = new Date();

			id = format.format(fechas);

			int i = 0;

			for (i = 0; i < 6; i++) {
				char idnum = id.charAt((int) (Math.random() * id.length()));
				id2 = id2 + idnum;
			}

		} catch (Exception e) {

		}
		return id + id2;
	}

	public String leerConfiguracion(int caso) throws Exception {
		String path = "";
		try {

			// Lo hago de esta manera porque de la manera anterior no
			// me funciona.
			InputStream input = null;

			ClassLoader cla = this.getClass().getClassLoader();
			Properties prop = new Properties();

			input = cla.getResource("FILESYSTEM.PROPERTIES").openStream();

			prop.load(input);

			// path = prop.getProperty("PATH_REPORTES");

			switch (caso) {
			case REPORTES:
				path = prop.getProperty("PATH_REPORTES");

				break;

			case REPORTES_FINAL:
				path = prop.getProperty("PATH_REPORTES_USUARIOS");

				break;

			}
		} catch (Exception e) {
			// throw new Exception("Error al Cargar el archivo Propiedades");
			e.printStackTrace();
		}

		return path;
	}

	public void executeSQLStatement(String sql, Connection conn)
			throws SQLException {
		try {
			PreparedStatement datos = conn.prepareStatement(sql);
			try {
				datos.executeUpdate();
			} catch (Exception e) {
				throw new SQLException(e.getMessage());
			} finally {
				datos.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
			throw new SQLException(e.getMessage());
		}

	}

}
